#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
	int x=0;bool f=0;char ch=getchar();
	while(ch<'0'||ch>'9')f^=(ch=='-'),ch=getchar();
	while('0'<=ch&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	return f?-x:x;
}
const int Maxn=5e5+5,inf=1e18+7;
int n,a[Maxn];
int m;
struct node{int l,r;}b[Maxn];
int mxr[Maxn],mxl[Maxn];
int f[Maxn];
int t[Maxn<<2];
void change(int x,int l,int r,int d,int p){
	if(l==r)return void(t[x]=p);
	int mid=l+r>>1;
	if(mid>=d)change(x<<1,l,mid,d,p);
	else change(x<<1|1,mid+1,r,d,p);
	t[x]=min(t[x<<1],t[x<<1|1]);
}
int query(int x,int l,int r,int L,int R){
	if(L<=l&&r<=R)return t[x];
	int mid=l+r>>1,res=inf;
	if(mid>=L)res=query(x<<1,l,mid,L,R);
	if(mid<R)res=min(res,query(x<<1|1,mid+1,r,L,R));
	return res;
}
signed main(){
//	ios::sync_with_stdio(0);
//	cin.tie(0);cout.tie(0);
	freopen("gonna.in","r",stdin);
	freopen("gonna.out","w",stdout);
	n=read();
	for(int i=1;i<=n;i++)a[i]=read();
	m=read();
	int mx=0,mn=inf;
	for(int i=1;i<=m;i++){
		int l=read(),r=read();
		mxr[r+1]=max(l,mxr[r+1]);
		mx=max(mx,l);mn=min(mn,r);
	}//printf("%d %d\n",mx,mn);
	int ans=inf;
	for(int i=1;i<=n;i++){
		mxr[i]=max(mxr[i],mxr[i-1]);
		if(mxr[i])f[i]=a[i]+query(1,1,n,mxr[i],i-1);
		else f[i]=a[i];
		change(1,1,n,i,f[i]);
		if(i>=mx)ans=min(ans,f[i]);
	}printf("%lld\n",ans);
	return 0;
}

